package com.linkgie.galaxyframework.metadata;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;

/**
 * 数据接口标注；
 * <p>
 * 
 * 标注一个类型或者接口根据属性生成“数据接口”；
 * <p>
 * 
 * 当标注于类时，必须标注于实体类（由 {@link DataEntity} 标注的类）；<br>
 * 
 * 当标注于接口时，该接口需要由实体类实现；
 * <p>
 * 
 * “数据接口({@link DataInterface})”依赖于“实体类”对其的实现，只有当“实体类”被注册解析时，实体类所实现的“数据接口”才会被解析和注册从而变得有意义。
 * 
 * @author huanghaiquan
 *
 */
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataInterface {

	/**
	 * 接口的唯一标识名；
	 * 
	 * <p>
	 * 
	 * 默认采用所标注的类型的全名；
	 * 
	 * @return
	 */
	String value() default "";

	/**
	 * 接口的唯一标识名；
	 * 
	 * 别名属性，与 {@link #value()} 属性相同；
	 * 
	 * @return
	 */
	@AliasFor("value")
	String name() default "";
	
	/**
	 * 主题名称，指明接口用途的描述性的名称；
	 * 
	 * @return
	 */
	String topic() default "";
	
	/**
	 * 是否继承父接口的声明；
	 * 
	 * @return
	 */
	boolean inherit() default false;

}
